/**
 * @file typeedition.h
 * @brief Fichier d'entête du module typeedition.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

#ifndef H_TYPEEDITION_H
#define H_TYPEEDITION_H

/* *********************************************************************

                       Librairies de typeedition                           

********************************************************************* */

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include "utilitaireString.h"

/* *********************************************************************

                        Définitions de types                           

********************************************************************* */

/**
 * @struct sTypeEdition
 * @brief Structure utilisée pour la gestion des TypeEdition
 *
 * Cette structure est utilisée pour gérer un TypeEdition. Les champs de cette structure doivent être modifiés ou lus par les accesseurs et mutateurs. Ils doivent être initialisés et libérés avec les fonctions prévus à cette effet
 */
struct sTypeEdition {
	unsigned int id; /** */
	char * libelle; /** */
  char maj;
  char sup;
};
/**
 * @typedef TypeEdition
 * @brief Redéfinit la structure sTypeEdition
 */
	typedef struct sTypeEdition TypeEdition;

/* *********************************************************************

           Fonctions de la structure TypeEdition          

********************************************************************* */

/**
 * @fn TypeEdition * creer_Typ() ;
 * @brief Crée une typeedition dans le tas
 *
 * @return un pointeur sur TypeEdition
 */
TypeEdition * creer_Typ();

/**
 * @fn void init_Typ(TypeEdition * typeedition);
 * @brief Initilise une typeedition
 *
 * @param[in,out] TypeEdition pointeur sur TypeEdition
 */
void init_Typ(TypeEdition * typeedition);

/**
 * @fn void liberer_Typ(TypeEdition * typeedition);
 * @brief Libère la typeedition
 *
 * @param[in,out] typeedition pointeur sur TypeEdition
 */
void liberer_Typ(TypeEdition * typeedition);

/**
 * @fn void detruire_Typ(TypeEdition ** typeedition);
 * @brief Détruis une typeedition du tas
 * 
 * @param[in,out] typeedition pointeur sur TypeEdition
 */
void detruire_Typ(TypeEdition ** typeedition);

/**
 * @fn void copier_Typ(TypeEdition *dest, const TypeEdition *src);
 * @brief Copie dans dest le TypeEdition src
 *
 * @param[in,out] dest contiendra les mêmes infor que src
 * @param src
 */
void copier_Typ(TypeEdition **dest, const TypeEdition *src);

/* *********************************************************************

           Accesseurs et Mutateurs de la structure TypeEdition               

********************************************************************* */

/**
 * @fn unsigned int getId_Typ(const TypeEdition * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers TypeEdition
 * @return unsigned int
 */
unsigned int getId_Typ(const TypeEdition * ptr) ;

/**
 * @fn void setId_Typ(TypeEdition *ptr, const unsigned int val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers TypeEdition.
 * @param val.
 */
void setId_Typ(TypeEdition *ptr, const unsigned int val) ;

/**
 * @fn char * getLibelle_Typ(const TypeEdition * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers TypeEdition
 * @return char *
 */
char * getLibelle_Typ(const TypeEdition * ptr) ;

/**
 * @fn void setLibelle_Typ(TypeEdition *ptr, const char * val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers TypeEdition.
 * @param val.
 */
void setLibelle_Typ(TypeEdition *ptr, const char * val) ;

/**
 * @fn void setMaj_Typ(TypeEdition *ptr, const char b);
 * @brief Set le besoin de faire une mise à jour, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setMaj_Typ(TypeEdition *ptr, const char b);

/**
 * @fn char getMaj_Typ(const TypeEdition *ptr);
 * @brief Retourne 0 si pas besoin de faire la mise à jour, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getMaj_Typ(const TypeEdition *ptr);

/**
 * @fn void setSup_Typ(TypeEdition *ptr, const char b);
 * @brief Set le besoin de le supprimer, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setSup_Typ(TypeEdition *ptr, const char b);

/**
 * @fn char getSup_Typ(const TypeEdition *ptr);
 * @brief Retourne 0 si pas besoin de le supprimer, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getSup_Typ(const TypeEdition *ptr);

#endif
